package com.jml.mapreduce.分组比较器;

import org.apache.hadoop.io.WritableComparable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

/*
*        ● 案例：有一个这样的订单数据，求出每一个订单中最贵的商品。
*        订单ID	商品ID	成交金额
*        1	    1	    222
*        1      2	    333
*        2	    3	    522
*        2      4	    122
*        2      5	    722
*        3	    6	    232
*        3      2	    33
*        ● 因为MapReduce中，先排序后分组。
*        ○ 最好是可以按照(订单+价格)一起排序,先按照订单排序，订单一样在按照价格排序。然后在根据订单分组，
*/
public class OrderBean implements WritableComparable<OrderBean> {

    private String orderId;
    private String productId;
    private double price;


    /**
     * 排序逻辑，先按照订单排序，订单相同按照价格降序排序。
     * @param o
     * @return
     */
    @Override
    public int compareTo(OrderBean o) {
        int compare = orderId.compareTo(o.orderId);
        //同一订单
        if(compare==0){
            //同一个订单下按照价格排序
            return Double.compare(o.price,price);
        }else{
            //不同订单根据单号排序
            return compare;
        }
    }

    @Override
    public void write(DataOutput out) throws IOException {
        out.writeUTF(orderId);
        out.writeUTF(productId);
        out.writeDouble(price);
    }

    @Override
    public void readFields(DataInput in) throws IOException {
        this.orderId = in.readUTF();
        this.productId = in.readUTF();
        this.price = in.readDouble();
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public String getProductId() {
        return productId;
    }

    public void setProductId(String productId) {
        this.productId = productId;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return orderId + "\t" + productId + "\t" + price;
    }


}
